From 84fa4b751c1c7eb98c70dcdd9eb92a2c418dbd8a Mon Sep 17 00:00:00 2001 From: robertlipe Date: Mon, 6 Oct 2014 02:45:16 +0000 Subject: [PATCH] Move more internals, particularly in unicsv, to QString. --- gpsbabel/an1.cc | 7 +- gpsbabel/cet_util.cc | 2 +- gpsbabel/defs.h | 7 +- gpsbabel/garmin_fs.cc | 2 +- gpsbabel/garmin_fs.h | 1 + gpsbabel/garmin_gpi.cc | 7 +- gpsbabel/gpx.cc | 2 +- gpsbabel/html.cc | 16 ++-- gpsbabel/kml.cc | 3 +- gpsbabel/parse.cc | 20 ++++- gpsbabel/psitrex.cc | 2 +- gpsbabel/text.cc | 12 ++- gpsbabel/tmpro.cc | 2 +- gpsbabel/unicsv.cc | 181 +++++++++++++++++++---------------------- gpsbabel/util.cc | 12 +-- gpsbabel/vcf.cc | 9 +- 16 files changed, 144 insertions(+), 141 deletions(-) diff --git a/gpsbabel/an1.cc b/gpsbabel/an1.cc index f2be0dd35..4638c21a1 100644 --- a/gpsbabel/an1.cc +++ b/gpsbabel/an1.cc @@ -814,16 +814,13 @@ Write_One_AN1_Waypoint(const Waypoint* wpt) if (rec->type == 0x12) { /* image */ if (wpt->icon_descr.contains(":\\")) { - rec->image_name = xstrdup(CSTR(wpt->icon_descr)); + rec->image_name = xstrdup(wpt->icon_descr); rec->height = -244; rec->width = -1; } } if (!rec->image_name && !wpt->icon_descr.isNull()) { -// FIXME: WTH? - char* t = xstrdup(CSTR(wpt->icon_descr)); - FindIconByName(t, &rec->guid); - xfree(t); + FindIconByName(CSTR(wpt->icon_descr), &rec->guid); } Write_AN1_Waypoint(outfile, rec); diff --git a/gpsbabel/cet_util.cc b/gpsbabel/cet_util.cc index 256f93dc8..b1566533f 100644 --- a/gpsbabel/cet_util.cc +++ b/gpsbabel/cet_util.cc @@ -438,7 +438,7 @@ cet_convert_string(const QString& str) // FIXME: this is really weird. Since cet_convert_string wants to free // its argument (!) we make a duplicate just to satisfy that kind of goofy // requirement. - return cet_convert_string(xstrdup(CSTR(str))); + return cet_convert_string(xstrdup(str)); } /* cet_convert_waypt: internal used within cet_convert_strings process */ diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index d9d4988d2..11c6315c3 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -1005,7 +1005,7 @@ const char* get_filename(const char* fname); /* extract the filename portion * /* this lives in gpx.c */ gpsbabel::DateTime xml_parse_time(const QString& cdatastr); -char* rot13(const QString& str); +QString rot13(const QString& str); /* * PalmOS records like fixed-point numbers, which should be rounded @@ -1113,9 +1113,14 @@ int gb_ptr2int(const void* p); */ int parse_coordinates(const char* str, int datum, const grid_type grid, double* latitude, double* longitude, const char* module); +int parse_coordinates(const QString& str, int datum, const grid_type grid, + double* latitude, double* longitude, const char* module); int parse_distance(const char* str, double* val, double scale, const char* module); +int parse_distance(const QString& str, double* val, double scale, const char* module); int parse_speed(const char* str, double* val, const double scale, const char* module); +int parse_speed(const QString& str, double* val, const double scale, const char* module); time_t parse_date(const char* str, const char* format, const char* module); +time_t parse_date(const QString& str, const char* format, const char* module); /* * From util_crc.c diff --git a/gpsbabel/garmin_fs.cc b/gpsbabel/garmin_fs.cc index ab767630f..70021d73b 100644 --- a/gpsbabel/garmin_fs.cc +++ b/gpsbabel/garmin_fs.cc @@ -288,7 +288,7 @@ garmin_fs_xml_convert(const int base_tag, int tag, const QString& Qcdatastr, Way { garmin_fs_t* gmsd; // FIXME: eliminate C string copy/use here: - const char *cdatastr = xstrdup(CSTR(Qcdatastr)); + const char *cdatastr = xstrdup(Qcdatastr); gmsd = GMSD_FIND(waypt); if (gmsd == NULL) { gmsd = garmin_fs_alloc(-1); diff --git a/gpsbabel/garmin_fs.h b/gpsbabel/garmin_fs.h index 182e2bd71..37eef2976 100644 --- a/gpsbabel/garmin_fs.h +++ b/gpsbabel/garmin_fs.h @@ -52,6 +52,7 @@ /* GMSD_SETSTR(a,b): a = gmsd field, b = null terminated source */ #define GMSD_SETSTR(a,b) if (gmsd && (b) && (b)[0]) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; } +#define GMSD_SETQSTR(a,b) if (gmsd) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; } #define GMSD_SETSTRQ(a,b) if (gmsd && !b.isEmpty()) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; } /* GMSD_SETNSTR(a,b,c): a = gmsd field, b = source, c = sizeof(source) */ diff --git a/gpsbabel/garmin_gpi.cc b/gpsbabel/garmin_gpi.cc index 1b6334f58..ed524a24b 100644 --- a/gpsbabel/garmin_gpi.cc +++ b/gpsbabel/garmin_gpi.cc @@ -963,7 +963,7 @@ wdata_compute_size(writer_data_t* data) if (!str.isEmpty()) { dt->addr_is_dynamic = 1; - dt->addr = xstrdup(CSTR(str)); + dt->addr = xstrdup(str); dt->mask |= GPI_ADDR_ADDR; dt->sz += (8 + strlen(dt->addr)); } @@ -1058,14 +1058,9 @@ wdata_write(const writer_data_t* data) if (str.isEmpty()) { str = wpt->notes; } -// if (str && (strcmp(str, wpt->shortname) == 0)) str = NULL; gbfputint32(0x80002, fout); -#if NEW_STRINGS s0 = s1 = 19 + wpt->shortname.length(); -#else - s0 = s1 = 19 + strlen(wpt->shortname); -#endif if (! opt_hide_bitmap) { s0 += 10; /* tag(4) */ } diff --git a/gpsbabel/gpx.cc b/gpsbabel/gpx.cc index 7e9337aa4..c2d2331a1 100644 --- a/gpsbabel/gpx.cc +++ b/gpsbabel/gpx.cc @@ -808,7 +808,7 @@ xml_parse_time(const QString& dateTimeString) int off_sign = 1; char* offsetstr = NULL; char* pointstr = NULL; - char* timestr = xstrdup(CSTR(dateTimeString)); + char* timestr = xstrdup(dateTimeString); offsetstr = strchr(timestr, 'Z'); if (offsetstr) { diff --git a/gpsbabel/html.cc b/gpsbabel/html.cc index 6d7f295b0..6c7265d1d 100644 --- a/gpsbabel/html.cc +++ b/gpsbabel/html.cc @@ -139,14 +139,13 @@ html_disp(const Waypoint* wpt) xfree(tmpstr); } if (!wpt->gc_data->hint.isEmpty()) { - char* hint = NULL; + QString hint; if (html_encrypt) { hint = rot13(wpt->gc_data->hint); } else { - hint = xstrdup(CSTR(wpt->gc_data->hint)); + hint = wpt->gc_data->hint; } - gbfprintf(file_out, "

Hint: %s

\n", hint); - xfree(hint); + gbfprintf(file_out, "

Hint: %s

\n", CSTR(hint)); } else if (!wpt->notes.isEmpty() && (wpt->description.isEmpty() || wpt->notes != wpt->description)) { gbfprintf(file_out, "

%s

\n", CSTRc(wpt->notes)); } @@ -214,22 +213,19 @@ html_disp(const Waypoint* wpt) logpart = xml_findfirst(curlog, "groundspeak:text"); if (logpart) { char* encstr = NULL; - char* s = NULL; - char* t = NULL; int encoded = 0; encstr = xml_attribute(logpart, "encoded"); encoded = (toupper(encstr[0]) != 'F'); + QString s; if (html_encrypt && encoded) { s = rot13(logpart->cdata); } else { s = xstrdup(logpart->cdata); } - t = html_entitize(s); - gbfprintf(file_out, "%s", t); - xfree(t); - xfree(s); + QString t = html_entitize(s); + gbfputs(t, file_out); } gbfprintf(file_out, "

\n"); diff --git a/gpsbabel/kml.cc b/gpsbabel/kml.cc index e1532410f..5a5a47b85 100644 --- a/gpsbabel/kml.cc +++ b/gpsbabel/kml.cc @@ -1389,12 +1389,12 @@ QString kml_geocache_get_logs(const Waypoint* wpt) logpart = xml_findfirst(curlog, "groundspeak:text"); if (logpart) { char* encstr = NULL; - char* s = NULL; char* t = NULL; int encoded = 0; encstr = xml_attribute(logpart, "encoded"); encoded = (toupper(encstr[0]) != 'F'); + QString s; if (html_encrypt && encoded) { s = rot13(logpart->cdata); } else { @@ -1405,7 +1405,6 @@ QString kml_geocache_get_logs(const Waypoint* wpt) t = html_entitize(s); r = r + t; xfree(t); - xfree(s); } r += "

"; diff --git a/gpsbabel/parse.cc b/gpsbabel/parse.cc index 4b056eef6..a3fbd296a 100644 --- a/gpsbabel/parse.cc +++ b/gpsbabel/parse.cc @@ -48,7 +48,6 @@ parse_distance(const char* str, double* val, double scale, const char* module) if ((str == NULL) || (*str == '\0')) { return 0; } - *val = strtod(str, &unit); if (unit == NULL) { fatal("%s: Unconvertable numeric value (%s)!\n", module, str); @@ -88,6 +87,11 @@ parse_distance(const char* str, double* val, double scale, const char* module) return 2; } +int +parse_distance(const QString& str, double* val, double scale, const char* module) { + return parse_distance(CSTR(str), val, scale, module); +} + /* * parse_speed: * @@ -144,6 +148,12 @@ parse_speed(const char* str, double* val, const double scale, const char* module return 2; } +int +parse_speed(const QString& str, double* val, const double scale, const char* module) +{ + return parse_speed(str, val, scale, module); +} + /* * Convert string 'str' into geodetic latitide & longitude values. The format * will be interpreted depending on 'grid' parameter. @@ -274,3 +284,11 @@ parse_coordinates(const char* str, int datum, const grid_type grid, return result; } + +int +parse_coordinates(const QString& str, int datum, const grid_type grid, + double* latitude, double* longitude, const char* module) +{ + return parse_coordinates(str, datum, grid, + latitude, longitude, module); +} diff --git a/gpsbabel/psitrex.cc b/gpsbabel/psitrex.cc index 7055e28fd..ec4f83c2c 100644 --- a/gpsbabel/psitrex.cc +++ b/gpsbabel/psitrex.cc @@ -357,7 +357,7 @@ psit_waypoint_w(gbfile* psit_file, const Waypoint* wpt) ident = global_opts.synthesize_shortnames ? mkshort(mkshort_handle, src) : - xstrdup(CSTRc(wpt->shortname)); + xstrdup(wpt->shortname); gbfprintf(psit_file, " %-6s, ", ident); xfree(ident); diff --git a/gpsbabel/text.cc b/gpsbabel/text.cc index bb50d0146..b34ff1291 100644 --- a/gpsbabel/text.cc +++ b/gpsbabel/text.cc @@ -152,14 +152,13 @@ text_disp(const Waypoint* wpt) xfree(stripped_html); } if (!wpt->gc_data->hint.isEmpty()) { - char* hint = NULL; + QString hint; if (txt_encrypt) { hint = rot13(wpt->gc_data->hint); } else { hint = xstrdup(wpt->gc_data->hint); } - gbfprintf(file_out, "\nHint: %s\n", hint); - xfree(hint); + gbfprintf(file_out, "\nHint: %s\n", CSTR(hint)); } } else if (!wpt->notes.isEmpty() && (wpt->description.isEmpty() || wpt->notes != wpt->description)) { gbfputs("\n", file_out); @@ -228,19 +227,18 @@ text_disp(const Waypoint* wpt) logpart = xml_findfirst(curlog, "groundspeak:text"); if (logpart) { char* encstr = NULL; - char* s = NULL; int encoded = 0; encstr = xml_attribute(logpart, "encoded"); encoded = (toupper(encstr[0]) != 'F'); + QString s; if (txt_encrypt && encoded) { s = rot13(logpart->cdata); } else { - s = xstrdup(logpart->cdata); + s = logpart->cdata; } - gbfprintf(file_out, "%s", s); - xfree(s); + gbfputs(s, file_out); } gbfprintf(file_out, "\n"); diff --git a/gpsbabel/tmpro.cc b/gpsbabel/tmpro.cc index a7048c886..1875b4964 100644 --- a/gpsbabel/tmpro.cc +++ b/gpsbabel/tmpro.cc @@ -209,7 +209,7 @@ tmpro_waypt_pr(const Waypoint* wpt) if (wpt->HasUrlLink()) { // Yes, it's lame to allocate/copy here. UrlLink link = wpt->GetUrlLink(); - l = xstrdup(CSTR(link.url_)); + l = xstrdup(link.url_); } gbfprintf(file_out, "new\t%.6s\t%.80s\t%08.6f\t%08.6f\t\t\t%.2f\t%d\t%d\t%.128s\n", CSTRc(shortname), diff --git a/gpsbabel/unicsv.cc b/gpsbabel/unicsv.cc index c853acf50..f805f8dce 100644 --- a/gpsbabel/unicsv.cc +++ b/gpsbabel/unicsv.cc @@ -302,38 +302,21 @@ unicsv_strrcmp(const char* s1, const char* s2) } } - +// There is no test coverage of this and it's been wrong for years and +// nobody has noticed... static int -unicsv_parse_gc_id(const char* str) +unicsv_parse_gc_id(const QString& str) { int res = 0; - - if (str && (str[0] == 'G') && (str[1] == 'C')) { - int base; - char cx; - - str += 2; - if (strlen(str) > 4) { - base = 31; - } else { - base = (*str < 'G') ? 16 : 31; - } - // FIXME: this is wrong. 0123456789ABCDEFGHJKMNPQRTVWXYZ ILOSU are omitted. - // That nobody has noticed is a good hint nobody cares... - while ((cx = *str++)) { - int num; - - if ((cx >= '0') && (cx <= '9')) { - num = cx - '0'; - } else if ((cx >= 'A') && (cx <= 'Z')) { - num = cx - 'A' + 10; - } else { - break; - } - - res = (res * base) + num; - } - if (base == 31) { + const QString kBase35 = "0123456789ABCDEFGHJKMNPQRTVWXYZ"; // ILOSU are omitted. + if (str.startsWith("GC")) { + int base35 = str.size() > 6; // above GCFFFF? + QString s = str.mid(2); + while (!s.isEmpty()) { + res = res * 16 + kBase35.indexOf(s[0]); + s = str.mid(1); + } + if (base35) { res -= 411120; } } @@ -430,20 +413,26 @@ unicsv_parse_time(const char* str, int* msec, time_t* date) return ((hour * SECONDS_PER_HOUR) + (min * 60) + (int)sec); } +static time_t +unicsv_parse_time(const QString& str, int* msec, time_t* date) +{ + return unicsv_parse_time(CSTR(str), msec, date); +} + static status_type -unicsv_parse_status(const char* str) +unicsv_parse_status(const QString& str) { - if ((case_ignore_strcmp(str, "true") == 0) || - (case_ignore_strcmp(str, "yes") == 0) || - (*str == '1')) { + if (str.compare("true", Qt::CaseInsensitive) == 0 || + str.compare("yes", Qt::CaseInsensitive) == 0 || + str == "1") { return status_true; - } else if ((case_ignore_strcmp(str, "false") == 0) || - (case_ignore_strcmp(str, "no") == 0) || - (*str == '0')) { + } + if (str.compare("false", Qt::CaseInsensitive) == 0 || + str.compare("no", Qt::CaseInsensitive) == 0 || + str == "0") { return status_false; - } else { - return status_unknown; } +return status_unknown; } static QDateTime @@ -517,10 +506,9 @@ unicsv_compare_fields(const QString& s, const field_t* f) static void -unicsv_fondle_header(const char* ibuf) +unicsv_fondle_header(QString s) { // TODO: clean up this back and forth between QString and char*. - QString s = QString(ibuf); char* buf = NULL; char* cbuf_start = NULL; int column; @@ -537,7 +525,7 @@ unicsv_fondle_header(const char* ibuf) } else if (s.contains('|')) { unicsv_fieldsep = "|"; } - cbuf_start = xstrdup(CSTR(s.toLower())); + cbuf_start = xstrdup(s.toLower()); const char* cbuf = cbuf_start; /* convert the header line into native ascii */ @@ -636,7 +624,6 @@ unicsv_rd_deinit(void) static void unicsv_parse_one_line(char* ibuf) { - char* s; Waypoint* wpt = NULL; int column; int utm_zone = -9999; @@ -650,7 +637,8 @@ unicsv_parse_one_line(char* ibuf) double swiss_easting = unicsv_unknown; double swiss_northing = unicsv_unknown; int checked = 0; - time_t date = -1, time = -1; + time_t date = -1; + time_t time = -1; int msec = -1; char is_localtime = 0; garmin_fs_t* gmsd; @@ -666,8 +654,8 @@ unicsv_parse_one_line(char* ibuf) memset(&ymd, 0, sizeof(ymd)); column = -1; - while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0))) { - + QString s; + while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0)), !s.isNull()) { if (column > unicsv_fields_tab_ct) { break; /* ignore extra fields on line */ } @@ -676,9 +664,8 @@ unicsv_parse_one_line(char* ibuf) column++; checked++; - - s = lrtrim(s); - if (! *s) { + s = s.trimmed(); + if (s.isEmpty()) { continue; /* skip empty columns */ } switch (unicsv_fields_tab[column]) { @@ -687,7 +674,7 @@ unicsv_parse_one_line(char* ibuf) case fld_date: case fld_datetime: /* switch column type if it looks like an iso time string */ - if (strchr(s, 'T')) { + if (s.contains('T')) { unicsv_fields_tab[column] = fld_iso_time; } break; @@ -699,12 +686,12 @@ unicsv_parse_one_line(char* ibuf) switch (unicsv_fields_tab[column]) { case fld_latitude: - human_to_dec(s, &wpt->latitude, &wpt->longitude, 1); + human_to_dec(CSTR(s), &wpt->latitude, &wpt->longitude, 1); wpt->latitude = wpt->latitude * ns; break; case fld_longitude: - human_to_dec(s, &wpt->latitude, &wpt->longitude, 2); + human_to_dec(CSTR(s), &wpt->latitude, &wpt->longitude, 2); wpt->longitude = wpt->longitude * ew; break; @@ -734,19 +721,19 @@ unicsv_parse_one_line(char* ibuf) break; case fld_utm_zone: - utm_zone = atoi(s); + utm_zone = s.toInt(); break; case fld_utm_easting: - utm_easting = atof(s); + utm_easting = s.toDouble(); break; case fld_utm_northing: - utm_northing = atof(s); + utm_northing = s.toDouble(); break; case fld_utm_zone_char: - utm_zc = toupper(s[0]); + utm_zc = s[0].toUpper().toLatin1(); break; case fld_utm: @@ -766,16 +753,16 @@ unicsv_parse_one_line(char* ibuf) break; case fld_bng_zone: - strncpy(bng_zone, s, sizeof(bng_zone) -1); + strncpy(bng_zone, CSTR(s), sizeof(bng_zone) -1); strupper(bng_zone); break; case fld_bng_northing: - bng_northing = atof(s); + bng_northing = s.toDouble(); break; case fld_bng_easting: - bng_easting = atof(s); + bng_easting = s.toDouble(); break; case fld_swiss: @@ -787,36 +774,36 @@ unicsv_parse_one_line(char* ibuf) break; case fld_swiss_easting: - swiss_easting = atof(s); + swiss_easting = s.toDouble(); break; case fld_swiss_northing: - swiss_northing = atof(s); + swiss_northing = s.toDouble(); break; case fld_hdop: - wpt->hdop = atof(s); + wpt->hdop = s.toDouble(); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_pdop: - wpt->pdop = atof(s); + wpt->pdop = s.toDouble(); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_vdop: - wpt->vdop = atof(s); + wpt->vdop = s.toDouble(); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_sat: - wpt->sat = atoi(s); + wpt->sat = s.toInt(); if (unicsv_detect) { unicsv_data_type = trkdata; } @@ -843,14 +830,14 @@ unicsv_parse_one_line(char* ibuf) case fld_utc_date: if ((is_localtime < 2) && (date < 0)) { - date = unicsv_parse_date(s, NULL); + date = unicsv_parse_date(CSTR(s), NULL); is_localtime = 0; } break; case fld_utc_time: if ((is_localtime < 2) && (time < 0)) { - time = unicsv_parse_time(s, &msec, &date); + time = unicsv_parse_time(CSTR(s), &msec, &date); is_localtime = 0; } break; @@ -865,42 +852,42 @@ unicsv_parse_one_line(char* ibuf) break; case fld_course: - WAYPT_SET(wpt, course, atof(s)); + WAYPT_SET(wpt, course, s.toDouble()); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_temperature: - d = atof(s); + d = s.toDouble(); if (fabs(d) < 999999) { WAYPT_SET(wpt, temperature, d); } break; case fld_temperature_f: - d = atof(s); + d = s.toDouble(); if (fabs(d) < 999999) { WAYPT_SET(wpt, temperature, FAHRENHEIT_TO_CELSIUS(d)); } break; case fld_heartrate: - wpt->heartrate = atoi(s); + wpt->heartrate = s.toInt(); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_cadence: - wpt->cadence = atoi(s); + wpt->cadence = s.toInt(); if (unicsv_detect) { unicsv_data_type = trkdata; } break; case fld_power: - wpt->power = atof(s); + wpt->power = s.toDouble(); if (unicsv_detect) { unicsv_data_type = trkdata; } @@ -929,56 +916,56 @@ unicsv_parse_one_line(char* ibuf) case fld_time: if ((is_localtime < 2) && (time < 0)) { - time = unicsv_parse_time(s, &msec, &date); + time = unicsv_parse_time(CSTR(s), &msec, &date); is_localtime = 1; } break; case fld_date: if ((is_localtime < 2) && (date < 0)) { - date = unicsv_parse_date(s, NULL); + date = unicsv_parse_date(CSTR(s), NULL); is_localtime = 1; } break; case fld_year: - ymd.tm_year = atoi(s); + ymd.tm_year = s.toInt(); break; case fld_month: - ymd.tm_mon = atoi(s); + ymd.tm_mon = s.toInt(); break; case fld_day: - ymd.tm_mday = atoi(s); + ymd.tm_mday = s.toInt(); break; case fld_hour: - ymd.tm_hour = atoi(s); + ymd.tm_hour = s.toInt(); break; case fld_min: - ymd.tm_min = atoi(s); + ymd.tm_min = s.toInt(); break; case fld_sec: - ymd.tm_sec = atoi(s); + ymd.tm_sec = s.toInt(); break; case fld_datetime: if ((is_localtime < 2) && (date < 0) && (time < 0)) { - time = unicsv_parse_time(s, &msec, &date); + time = unicsv_parse_time(CSTR(s), &msec, &date); is_localtime = 1; } break; case fld_ns: - ns = tolower(s[0]) == 'n' ? 1 : -1; + ns = s.startsWith('n', Qt::CaseInsensitive) ? 1 : -1; wpt->latitude *= ns; break; case fld_ew: - ew = tolower(s[0]) == 'e' ? 1 : -1; + ns = s.startsWith('e', Qt::CaseInsensitive) ? 1 : -1; wpt->longitude *= ew; break; @@ -999,34 +986,34 @@ unicsv_parse_one_line(char* ibuf) } switch (unicsv_fields_tab[column]) { case fld_garmin_city: - GMSD_SETSTR(city, s); + GMSD_SETQSTR(city, s); break; case fld_garmin_postal_code: - GMSD_SETSTR(postal_code, s); + GMSD_SETQSTR(postal_code, s); break; case fld_garmin_state: - GMSD_SETSTR(state, s); + GMSD_SETQSTR(state, s); break; case fld_garmin_country: - GMSD_SETSTR(country, s); + GMSD_SETQSTR(country, s); break; case fld_garmin_addr: - GMSD_SETSTR(addr, s); + GMSD_SETQSTR(addr, s); break; case fld_garmin_phone_nr: - GMSD_SETSTR(phone_nr, s); + GMSD_SETQSTR(phone_nr, s); break; case fld_garmin_phone_nr2: - GMSD_SETSTR(phone_nr2, s); + GMSD_SETQSTR(phone_nr2, s); break; case fld_garmin_fax_nr: - GMSD_SETSTR(fax_nr, s); + GMSD_SETQSTR(fax_nr, s); break; case fld_garmin_email: - GMSD_SETSTR(email, s); + GMSD_SETQSTR(email, s); break; case fld_garmin_facility: - GMSD_SETSTR(facility, s); + GMSD_SETQSTR(facility, s); break; default: break; @@ -1050,7 +1037,7 @@ unicsv_parse_one_line(char* ibuf) switch (unicsv_fields_tab[column]) { case fld_gc_id: - gc_data->id = atoi(s); + gc_data->id = s.toInt(); if (gc_data->id == 0) { gc_data->id = unicsv_parse_gc_id(s); } @@ -1062,10 +1049,10 @@ unicsv_parse_one_line(char* ibuf) gc_data->container = gs_mkcont(s); break; case fld_gc_terr: - gc_data->terr = atof(s) * 10; + gc_data->terr = s.toDouble() * 10; break; case fld_gc_diff: - gc_data->diff = atof(s) * 10; + gc_data->diff = s.toDouble() * 10; break; case fld_gc_is_archived: gc_data->is_archived = unicsv_parse_status(s); @@ -1095,7 +1082,7 @@ unicsv_parse_one_line(char* ibuf) gc_data->placer = s; break; case fld_gc_placer_id: - gc_data->placer_id = atoi(s); + gc_data->placer_id = s.toInt(); break; case fld_gc_hint: gc_data->hint = s; diff --git a/gpsbabel/util.cc b/gpsbabel/util.cc index eb8ec5115..abb67520c 100644 --- a/gpsbabel/util.cc +++ b/gpsbabel/util.cc @@ -1165,10 +1165,10 @@ strlower(char* src) return src; } -char* +QString rot13(const QString& s) { - char* result = xstrdup(CSTR(s)); + char* result = xstrdup(s); char* cur = result; int flip = 1; while (cur && *cur) { @@ -1185,7 +1185,9 @@ rot13(const QString& s) } cur++; } - return result; + QString r(result); + xfree(result); + return r; } /* @@ -1406,8 +1408,8 @@ strip_nastyhtml(const QString& in) char* returnstr, *sp; char* lcstr, *lcp; - sp = returnstr = xstrdup(CSTR(in)); - lcp = lcstr = strlower(xstrdup(CSTR(in))); + sp = returnstr = xstrdup(in); + lcp = lcstr = strlower(xstrdup(in)); while (lcp = strstr(lcstr, ""), NULL != lcp) { sp = returnstr + (lcp - lcstr) ; /* becomes */ diff --git a/gpsbabel/vcf.cc b/gpsbabel/vcf.cc index 7816ec186..89b166fb8 100644 --- a/gpsbabel/vcf.cc +++ b/gpsbabel/vcf.cc @@ -94,6 +94,12 @@ vcf_print(const char* s) xfree(p); } +static void +vcf_print(const QString& s) +{ + vcf_print(CSTR(s)); +} + static void vcf_disp(const Waypoint* wpt) { @@ -117,9 +123,8 @@ vcf_disp(const Waypoint* wpt) vcf_print_utf(&wpt->gc_data->desc_long); gbfprintf(file_out, "\\n\\nHINT:\\n"); if (vcf_encrypt) { - char* s = rot13(wpt->gc_data->hint); + QString s = rot13(wpt->gc_data->hint); vcf_print(s); - xfree(s); } else { vcf_print(CSTR(wpt->gc_data->hint)); } -- 2.30.2